﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using ProtocoloNameSpace;
using HTSwitchServerNamespace.Protocols;
using Newtonsoft.Json;
using HTSwitchServerNamespace.DataMocks;
using HTSwitchServerNamespace.ProtocolsNP;

namespace HTSwitchServerNamespace
{
    public class ProtocoloComunicacion
    {
        #region MetodosProtocolocomunicacion

        public IProtocol ObtenerProtocolo(string strReturnData)
        {
            // Returns the data received from the host to the console.

            CLogger.Append("Mensaje Leido:" + strReturnData + " (" + strReturnData.Length.ToString() + " caracter(es))", CLogger.INFO);

            try
            {
                
                if (strReturnData.Contains("And4GPlay"))  ////////////////////////////////////////DISPOSITIVO GPS ANDROID GPLAY///////////////////
                {
                    DataMockAndroidForGooglePlay objGPSAndDataGPLAY = new DataMockAndroidForGooglePlay();
                    objGPSAndDataGPLAY = JsonConvert.DeserializeObject<DataMockAndroidForGooglePlay>(strReturnData);

                    CLogger.Append("Mensaje GPS GOOGLE PLAY... ", CLogger.INFO);
                    return new Protocol_AndroidForGooglePlayGps();
                }
                else
                {
                    throw new Exception("No existe dispositivo");
                }
            }
            catch
            {
                try
                {

                    if ((strReturnData.Contains("And"))&&(strReturnData.Contains("Mail")))  ////////////////////////////////////////DISPOSITIVO GPS ANDROID ///////////////////
                    {
                        DataMockAndroidGps objGPSAndData = new DataMockAndroidGps();
                        objGPSAndData = JsonConvert.DeserializeObject<DataMockAndroidGps>(strReturnData);

                        CLogger.Append("Mensaje GPS ANDROID", CLogger.INFO);
                       // return new Protocol_AndroidGps();
                       return new Protocolo_AndroidGpsCys(); ///HZ : Aca llamamos al nuevo WebService //FD Nuevo y viejo WS
                    }
                    else
                    {
                        throw new Exception("No existe dispositivo");
                    }
                }
                catch
                {

                    try
                    {   

                        if ((strReturnData.Contains("Nok"))&&(strReturnData.Contains("Mail")))  ////////////////////////////////////////DISPOSITIVO GPS NOKIA ///////////////////
                        {
                            DataMockNokia objGPSNokia = new DataMockNokia();
                            objGPSNokia = JsonConvert.DeserializeObject<DataMockNokia>(strReturnData);

                            CLogger.Append("Mensaje GPS NOKIA... ", CLogger.INFO);
                            return new Protocol_NokiaGps();          ///FD Nokia nuevo y viejo WS
                        }
                        else
                        {
                            throw new Exception("No existe dispositivo");
                        }
                    }
                    catch
                    { 
                        try
                        {
                            if ((strReturnData.Contains("IPhone"))&&(strReturnData.Contains("Mail")))  ////////////////////////////////////////DISPOSITIVO GPS IPHONE///////////////////
                            {
                                DataMockIphone objGPSIphone = new DataMockIphone();
                                objGPSIphone = JsonConvert.DeserializeObject<DataMockIphone>(strReturnData);

                                CLogger.Append("Mensaje GPS IPhone... ", CLogger.INFO);
                                return new Protocol_IPhoneGps();
                            }
                            else
                            {
                                throw new Exception("No existe dispositivo");
                            }
                        }catch
                        {
                            try
                            {
                                
                                if ((strReturnData.Contains("IPhone"))&&(strReturnData.Contains("Mail")))  ////////////////////////////////////////DISPOSITIVO GPS IPHONE NP///////////////////
                                {
                                    DataMockIPhoneNP objGPSIphone_NP = new DataMockIPhoneNP();
                                    objGPSIphone_NP = JsonConvert.DeserializeObject<DataMockIPhoneNP>(strReturnData);

                                    CLogger.Append("Mensaje GPS IPhone NP... ", CLogger.INFO);
                                    return new Protocolo_IPhoneGPS_NP();    //DEVOLVER PROTOCOLO IPHONE NP
                                }
                                else
                                {
                                    throw new Exception("No existe dispositivo");
                                }
                            }
                            catch
                            {
                                try
                                {
                                    if ((strReturnData.Contains("BB"))&&(strReturnData.Contains("Mail")))  ////////////////////////////////////////DISPOSITIVO GPS BB///////////////////
                                    {
                                        DataMockBlackberry objGPSBB_NP = new DataMockBlackberry();
                                        objGPSBB_NP = JsonConvert.DeserializeObject<DataMockBlackberry>(strReturnData);

                                        CLogger.Append("Mensaje GPS BB... ", CLogger.INFO);
                                        return new Protocolo_BlackberryGPS();
                                    }
                                    else
                                    {
                                        throw new Exception("No existe dispositivo");
                                    }
                                }
                                catch
                                {
                                    try
                                    {
                                        if ((strReturnData.Contains("BB"))&&(strReturnData.Contains("CodAct")))  ////////////////////////////////////////DISPOSITIVO GPS BB NP///////////////////
                                        {
                                            DataMockBlackberryNP objGPSBB_NP = new DataMockBlackberryNP();
                                            objGPSBB_NP = JsonConvert.DeserializeObject<DataMockBlackberryNP>(strReturnData);

                                            CLogger.Append("Mensaje GPS BB NP... ", CLogger.INFO);
                                            return new Protocolo_BlackberryGPS_NP();
                                        }
                                        else
                                        {
                                            throw new Exception("No existe dispositivo");
                                        }
                                    }
                                    catch
                                    {
                                        try
                                        {
                                            if ((strReturnData.Contains("And"))&&(strReturnData.Contains("CodAct")))  ////////////////////////////////////////DISPOSITIVO GPS AND NP///////////////////
                                            {
                                                DataMockAndroidNP objGPSAnd_NP = new DataMockAndroidNP();
                                                objGPSAnd_NP = JsonConvert.DeserializeObject<DataMockAndroidNP>(strReturnData);

                                                CLogger.Append("Mensaje GPS And NP... ", CLogger.INFO);
                                                return new Protocolo_AndroidGPS_NP();
                                            }
                                            else
                                            {
                                                throw new Exception("No existe dispositivo");
                                            }
                                        }
                                        catch
                                        {
                                            try
                                            {
                                                if ((strReturnData.Contains("Nok"))&&(strReturnData.Contains("CodAct")))  ////////////////////////////////////////DISPOSITIVO GPS Nokia NP///////////////////
                                                {
                                                    DataMockNokiaNP objGPSNokia_NP = new DataMockNokiaNP();
                                                    objGPSNokia_NP = JsonConvert.DeserializeObject<DataMockNokiaNP>(strReturnData);

                                                    CLogger.Append("Mensaje GPS Nokia NP... ", CLogger.INFO);
                                                    return new Protocolo_NokiaGPS_NP();
                                                }
                                                else
                                                {
                                                    throw new Exception("No existe dispositivo");
                                                }
                                            }
                                            catch
                                            {

                                                /////////////////////////************ DISPOSITIVO ARKNAV ******************//////////////////////////7
                                                try
                                                {
                                                    if (strReturnData.Contains("05*827"))
                                                    {

                                                        //Ejemplo Real
                                                        //GPS//354779035057430,05*827,000,PT35,V,0000.0000,N,00000.0000,E,000.0,000.0,00.0,12:52:00 22-02-12,1.24,98,2D,,

                                                        //GSM//359587019015786,05*827,+CENG: 0,"0706,38,0,466,97,61,f24f,03,00"+CENG: 1,"0692,31,59,????"+CENG: 2,"0702,29,63,????"+CENG: 3,"0697,22,56,????"+CENG: 4,"0704,23,61,304b"+CENG: 5,"0684,20,27,f252"+CENG: 6,"0696,20,59,f548"   

                                                        if (strReturnData.Contains("+CENG:"))
                                                        {
                                                            CLogger.Append("Mensaje GSM", CLogger.INFO);
                                                            return new Protocol_GsmGps();
                                                        }
                                                        else if (strReturnData.Contains("PT35"))
                                                        {
                                                            CLogger.Append("Mensaje GPS", CLogger.INFO);
                                                            return new Protocol_GenericGps();
                                                        }
                                                        else
                                                        {
                                                            throw new Exception("No existe dispositivo");
                                                        }
                                                    }
                                                    else
                                                    {
                                                        throw new Exception("No existe dispositivo");
                                                    }

                                                }
                                                catch
                                                {
                                                  //  throw new Exception("No existe dispositivo");
                                                    try 
                                                    {
                                                        if ((strReturnData.Contains("POST")) && (strReturnData.Contains("application/json")))
                                                        {
                                                           // CLogger.Append("[ProtocoloComunicacion] MENSAJE GLOBAL MENDOZA ", CLogger.INFO);  //DEBUG
                                                            return new ProtocoloGlobalMendozaSat();
                                                        }
                                                        else
                                                        {
                                                            throw new Exception("No existe dispositivo");
                                                        }
                                                        
                                                    }catch
                                                    {

                                                        throw new Exception("No existe dispositivo");
                                                    }
                                                }
                                            }

                                        }

                                    }

                                }

                            }
                            
                        }
                    
 
                    
                    }     

                }

            }
            return null;
        }
        #endregion

        #region Constructor
        /// <summary>
        /// Constructor por defecto
        /// </summary>
        //public ProtocoloComunicacion()
        //{	

        //}
        #endregion
    }
}
